import random
from tkinter import *
import tkinter as tk
import tkinter.font as tf

def getInput(title, message):
    def return_callback(event):
        print('quit...')
        root.quit()

    def close_callback(tkMessageBox=None):
        tkMessageBox.showinfo('message', 'no click...')

    root = Tk(className=title)
    root.wm_attributes('-topmost', 1)
    screenwidth, screenheight = root.maxsize()
    width = 400
    height = 130
    size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
    root.geometry(size)
    root.resizable(0, 0)
    lable = Label(root, height=2)
    lable['text'] = message
    lable.pack()
    entry = Entry(root)
    entry.bind('<Return>', return_callback)
    entry.pack()
    entry.focus_set()
    root.protocol("WM_DELETE_WINDOW", close_callback)
    root.mainloop()
    str = entry.get()
    root.destroy()
    return str

list2 = ['''1.	请输入一个数n，计算1-n的和''',
         '''2.	实现与AI进行猜拳的游戏。完成效果：输入一个数字代表石头、剪刀、布的一种AI随机生成一种情况，通过判断得出胜负结果并输出。''',
         '''3.	打印出所有的“水仙花数”，所谓“水仙花数”是指一个三位数，其各位数字立方和等于该数本身。例如：153是一个“水仙花数”，因为153=1^3＋5^3＋3^3''',
         '''4.	请输入年份n，判断n是否是闰年''',
         '''5.	给定一任意秒数（大于0小于86400），将其转化成对应的时间转换为相应时、分、秒。完成效果：输入给定秒数后在屏幕上正确输出转换后的结果''',
         '''6.	打印九九乘法表''',
         '''7.	逢3拍手游戏的规则是：从1开始顺序数数，数到有3或者包含3的倍数的时候拍手。本实例要求编写程序，模拟实现逢三拍手游戏，输出100以内需要拍手的数字。''',
         '''8.	判断‘AbCdeFgH’中小写字母的个数。''',
         '''9.	已知元组tu_num1 = ('p', 'y', 't', ['o', 'n'])，请向元组的最后一个列表中添加新元素“h”''',
         '''10.	大小数归类。给定列表li = [11, 22, 33, 44, 55, 77, 88, 99, 90],将列表中所有大于等于66的值保存到第一个列表中，将列表中小于66的值保存到第二个列表中。''',
         '''11.	已知字符串str= 'skdaskerkjsalkj'，请统计该字符串中各字母出现的次数''',
         '''12.	数字加密游戏、编程程序，从键盘任意输入1个4位数，将该数字中的每位数与7相乘，然后取乘积结果的个位数对该数字进行替换，最后得到1个新的4位数。''',
         '''13.	用“*”输出打印金字塔形状''',
         '''14.	编写程序，实现输出100以内质数的功能''',
         '''15.	数据去重与排序。为了做一项问卷调查且保证实验的客观性，李雷和朋友用计算机生成了N个1～1000之间的随机整数(N<=1000),N为用户键盘输入定义，对于生成的数据中重复的数字，只能保留一个，把其余相同的数字去掉，将不同的数对应为不同的学生的学号，最后把这些数从小到大排序，请根据题目完成数据的去重和排序工作。''',
         '''16.	编写函数，判断用户输入的三个数字是否能构成三角形的三条边''',
         '''17.	角谷猜想又称冰雹猜想，是由日本数学家角谷静发现的一种数学现象，它的具体内容是：以一个正整数n为例，如果n为偶数，就将它变为n/2， 如果除后变为奇数，则将它乘3加1（即3n+1）。不断重复这样的运算，经过有限步后，必然会得到1。据日本和美国的数学家攻关研究，所有小于7×1011的自然数，都符合这个规律。
         本案例要求编写代码，计算用户输入的数据按照以上规律经多少次运算后可变为1。''',
         '''18.	随机产生15个数，按从大到小排序''',
         '''19.	找出五位数回文数。五位数中，对称的数称为回文数，打印所有的五位回文数并计算个数。如:12321。''',
         '''20.	利用条件运算符的嵌套来完成此题：学习成绩>=90分的同学用A表示，60-89分之间的用B表示，60分以下的用C表示。''']
num = 20
i = 1
list1 = []
#s1 = input('请输入名字：')
s1 = getInput('欢迎参加python考试','请输入名字：')
while i<6:
    n = random.randint(1,20)
    if n not in list1:
        list1.append(n)
        i+=1
list1.sort()
#print(list1)
str1 = '\n'+'\n'+f'{s1}同学,你好,你的题目是： {list1}'+'\n'+'\n'+'\n'+'\n'
def wrap(string, max_width):
    result1 = [string[i:i + max_width] for i in range(0, len(string), max_width)]
    result = '\n'.join(result1)
    return result
for i in list1:
    str2 = list2[i-1]
    str2 = str2.replace('\t',' ')
    str2 = wrap(str2, 34)
    str1 = str1+str2+'\n'+'\n'

w = tk.Tk()
w.title('python考试题目')
w.geometry('750x550')

ft = tf.Font(size=15,weight=tf.BOLD)
lab = tk.Label(w,text=str1,fg='#003333',font=ft)
lab.pack()
w.mainloop()